#ifndef __REDBLACK_H_
#define __REDBLACK_H_


/* Enumeracao para busca silenciosa ou barulhenta (caminhos) */
enum {
   QUIET,
   VERBOSE
};

/* Cores dos noh's da arvore */
typedef enum {
   BLACKNODE,
   REDNODE
} COLOR;

/* Enumeracao de reltados da insercao */
enum {
   ADD_HEAD_OK,
   ADD_NODE_OK,
   ADD_NODE_EXISTS,
   ADD_ERROR
};

/* Enumeracao par adefinir qual rotacao a se fazer */
enum {
   RIGHT,
   LEFT
};

/* Estrutura de noh da arvore */
typedef struct treenode_s {

   int value;
   COLOR color;
   struct treenode_s *parent;
   struct treenode_s *left;
   struct treenode_s *right;

} treenode_t;

int rb_insert(treenode_t **, int);
treenode_t *rb_search(treenode_t *, int, int);
treenode_t *rb_remove(treenode_t **, int);
void rb_rotate(treenode_t **, treenode_t *, int);
void rb_remove_extra(treenode_t **, treenode_t *);

#endif
